home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
man
/
cat.6
/
xspringies.6
< prev
next >
Wrap
Text File
|
1995-07-25
|
35KB
|
661 lines
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
NNNNAAAAMMMMEEEE
xspringies - a mass and spring simulation system for X
windows
SSSSYYYYNNNNTTTTAAAAXXXX
xxxxsssspppprrrriiiinnnnggggiiiieeeessss [ _o_p_t_i_o_n_s ]
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
xxxxsssspppprrrriiiinnnnggggiiiieeeessss is a simulator which allows you to interactively
create and edit a system of masses and springs. The
parameters of the masses and springs (such as mass
elasticity and spring K) as well as those of the surrounding
system (such as air viscosity and gravity) can be changed.
These systems can be loaded and saved into a file.
I guess you could use xxxxsssspppprrrriiiinnnnggggiiiieeeessss for real work, but it's
really intended to be a time waster.
OOOOPPPPTTTTIIIIOOOONNNNSSSS
-bg _c_o_l_o_r
Specifies the color of the window background. The
default is black.
-d _d_i_s_p_n_a_m_e
Specifies the display screen on which xxxxsssspppprrrriiiinnnnggggiiiieeeessss
displays its window. If the display option is not
specified, xxxxsssspppprrrriiiinnnnggggiiiieeeessss uses the display screen specified
by your DISPLAY environment variable.
-display _d_i_s_p_n_a_m_e
This option is the same as the ----dddd option.
-fg _c_o_l_o_r
Specifies the foreground color of the window. The
default is white.
-geometry _g_e_o_m
Specifies the width, height, and location of the
xxxxsssspppprrrriiiinnnnggggiiiieeeessss window. If the geometry option is not
specified, xxxxsssspppprrrriiiinnnnggggiiiieeeessss uses default values. The
geometry option has the format
[=][_w_i_d_t_hx_h_e_i_g_h_t][+/-_x_o_f_f_s_e_t+/-_y_o_f_f_s_e_t].
-nbb This option turns off the bounding-box optimization.
To produce smooth animation, xxxxsssspppprrrriiiinnnnggggiiiieeeessss redraws the
smallest screen region which contains all objects. For
smaller objects, the performance improvement is very
noticible -- this is the bounding-box optimization. By
disabling it with this option, xxxxsssspppprrrriiiinnnnggggiiiieeeessss redraws the
entire display window. On slower machines or larger
window sizes, this can produce slow results. The main
reason for using this option is if the bounding-box
Page 1 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
changes size rapidly, causing uneven animation.
-hl _c_o_l_o_r
Specifies the color of the button and selection
highlights in the window. This defaults to the
foreground color, or to green on color displays.
-rv Specifies that the foreground and background colors be
reversed.
-st _t_h_i_c_k_n_e_s_s
Specifies the thickness of the springs in pixels (0 is
the default value)
SSSSUUUUMMMMMMMMAAAARRRRYYYY OOOOFFFF OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN
The left side of the xxxxsssspppprrrriiiinnnnggggiiiieeeessss window contains the
controls, and the right side contains the display. Masses
can be created and placed with the mouse when in MMMMaaaassssssss mode,
and springs can be created when in SSSSpppprrrriiiinnnngggg mode. Temporary
springs that connect the mouse and any mass can be used to
pull on objects. Masses and springs can be selected in edit
mode, and moved around. Parameters of the masses and
springs (such as Mass or Elasticity) can be set upon
creation or if they are selected.
Forces (such as gravity) can be enabled by pressing the
appropriate force button with customizable parameters.
Environment parameters such as viscosity of the medium and
stickiness of the walls can also be set. Each of the four
walls can be disabled.
The animation/simulation is activated by pressing the GGGGOOOO!!!!
button.
The entire system (masses, springs and parameters) can be
loaded and saved to files. XXXXsssspppprrrriiiinnnnggggiiiieeeessss comes with many
demonstration files.
CCCCOOOONNNNTTTTRRRROOOOLLLLSSSS
There are three types of controls (widgets) in xxxxsssspppprrrriiiinnnnggggiiiieeeessss.
There are push buttons, checkboxes and sliders. The push
buttons and checkboxes act in the obvious manner. If you
click on them, they get activated.
Sliders are a little more compilicated. They consist of a
left arrow button, a right arrow button, and a text box.
The text box displays the current value. Clicking on this
text box causes it to become highlighted. All text input
then goes to the text box. After entering a value, return
accepts it, and escape cancels.
The value displayed can also be changed by pressing the
Page 2 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
arrow buttons. Using the _L_e_f_t _m_o_u_s_e _b_u_t_t_o_n causes the value
to be incremented or decremented by one step. The _M_i_d_d_l_e
_m_o_u_s_e _b_u_t_t_o_n is the same as the left mouse button, but
holding it down causes it to scan by one step at a time.
The _R_i_g_h_t _m_o_u_s_e _b_u_t_t_o_n scans like the _M_i_d_d_l_e _m_o_u_s_e _b_u_t_t_o_n
except that it scans 10 steps at a time.
EEEEDDDDIIIITTTTIIIINNNNGGGG MMMMOOOODDDDEEEESSSS
There are three main modes in xxxxsssspppprrrriiiinnnnggggiiiieeeessss. These are _E_d_i_t,
_M_a_s_s and _S_p_r_i_n_g. In _E_d_i_t mode, you can select, move and
throw objects. In _M_a_s_s mode, you can create masses. In
_S_p_r_i_n_g mode, you can create springs and tug on an object
with a spring connected to the mouse.
More specifically,
_E_d_i_t mmmmooooddddeeee::::
---- _L_e_f_t _m_o_u_s_e _b_u_t_t_o_n selects objects.
If you click on or near an object, it becomes
selected, and all other objects become unselected. If
you hold down shift while clicking, the object becomes
selected (or unselected if it was already selected),
and all other objects remain the same.
If you do not click near an object, dragging the
mouse causes a selection box to appear. Anything
within the selection box when the mouse is released
becomes selected. All other masses become unselected,
unless the shift key was held down for the initial
click.
---- _M_i_d_d_l_e _m_o_u_s_e _b_u_t_t_o_n moves objects.
All selected objects move with the mouse. The masses
are frozen in their positions after the initial click.
They continue to move relative to the mouse movement
until the middle button is released.
---- _R_i_g_h_t _m_o_u_s_e _b_u_t_t_o_n throws objects.
This acts the same way as moving objects with the
middle button, except for the fact that the mouse
velocity is transferred to all selected objects when
the right mouse button is released.
Note: a good way to stop an object from moving is to
simply select it and click the right mouse button.
_M_a_s_s mmmmooooddddeeee::::
When you click with the mouse, a mass appears. The
mass takes on the values of the _M_a_s_s and _E_l_a_s_t_i_c_i_t_y
sliders. The mass is placed when the mouse button is
released.
_S_p_r_i_n_g mmmmooooddddeeee::::
Page 3 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
When you click with the mouse, if there is a mass
nearby, one end of a spring is connected to it. The
other end of the spring is connected to the cursor
until the mouse button is released. If no mass is
nearby when the spring is released, the spring is
discarded. The new spring takes on the values of the
_K_s_p_r_i_n_g and _K_d_a_m_p sliders. The rest length of the
spring is equal to the length of the spring when it was
created.
---- _L_e_f_t _m_o_u_s_e _b_u_t_t_o_n adds a spring between two masses
while actively affecting the first mass.
---- _M_i_d_d_l_e _m_o_u_s_e _b_u_t_t_o_n adds a spring between the first
mass and the cursor, actively affecting the first mass.
The spring is discarded when the mouse button is
released.
---- _R_i_g_h_t _m_o_u_s_e _b_u_t_t_o_n adds a spring between two masses.
The first mass is not affected by the spring until the
spring is in place after the mouse is released.
OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN
Masses and Springs
Accelerations on the masses are calculated according
to gravity (and other special forces), viscous forces,
and by forces from the springs. When a mass collides
with a wall, its velocity in the direction of the wall
is reversed. The resulting velocity is multipled by
the _E_l_a_s_t_i_c_i_t_y of the mass. So, an elasticity of 0.0
causes an inelastic collision (it stops on the wall),
and an elasticity of 1.0 results in an elastic
collision.
If a mass is fixed, all forces on it are ignored. It
simply does not move. Think of it as a nail (a really
good one).
The _M_a_s_s and _E_l_a_s_t_i_c_i_t_y of a mass can be changed by
selecting the mass and changing the values on the
corresponding sliders. To make a mass fixed or
unfixed, check or uncheck the _F_i_x_e_d _M_a_s_s checkbox while
the mass is selected.
A spring has three parameters associated with it.
_K_s_p_r_i_n_g, _K_d_a_m_p and rest length. The spring force is
calculated as follows (according to Hooke's law):
FFFF = - _K_s_p_r_i_n_g * (length - rest length) - _K_d_a_m_p *
(velocity in spring direction)
To change the _K_s_p_r_i_n_g or _K_d_a_m_p of a spring, change
the values of the sliders when the spring is selected.
Pressing the _S_e_t _R_e_s_t _L_e_n_g_t_h button changes the rest
Page 4 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
length of a selected spring to its current length.
Forces and sticky stuff
There are four special forces. They can be turned on
and off by clicking their appropriate box. When
highlighted, the force is on. Each of these forces has
two parameters associated with it (for example,
_M_a_g_n_i_t_u_d_e and _D_i_r_e_c_t_i_o_n for gravity). Only one
forces's parameters are displayed at a time (below the
force buttons). Which particular force is shown by a
darker box around that force. This force selector box
is moved to another force whenever a force is turned
on.
Some of the forces are applied relative to some
specified origin, or center point. By default, this
center point is the center of the screen. It can be
changed to be any one particular mass by selecting a
single mass, and pushing the _S_e_t _C_e_n_t_e_r button. If no
masses are selected, the current center is changed to
be the center of the screen.
Center points are marked by a box around the center
mass.
There are four forces that can be enabled. The first
one, _G_r_a_v_i_t_y, acts in the familiar manner. It
accelerates masses by the value specified by _G_r_a_v_i_t_y in
a direction specified by _D_i_r_e_c_t_i_o_n. The _D_i_r_e_c_t_i_o_n is
measured in degrees, with 0.0 degrees being down,
increasing counter-clockwise.
The second force is a bit strange, and isn't real.
Its a force which attracts the center of mass of all
the objects toward the center point. It has a
_M_a_g_n_i_t_u_d_e and a _D_a_m_p_i_n_g coefficient.
The third force is a force which attracts all masses
toward the center point. This force has a _M_a_g_n_i_t_u_d_e
and an _E_x_p_o_n_e_n_t associated with it. The _E_x_p_o_n_e_n_t is
simply how the force relation works. A value of 2.0
means inverse-square force (the force is inversely
proportional to the distance squared). A value of 0.0
is a constant force independent of position. If the
_M_a_g_n_i_t_u_d_e of this force is negative, it becomes a
repulsion force.
The fourth force is a wall repulsion force. Masses
are repelled by a force from each wall that is on.
This force has a _M_a_g_n_i_t_u_d_e and _E_x_p_o_n_e_n_t associated with
it. The _E_x_p_o_n_e_n_t behaves similarly to that of the
third force.
For the most part, most everything obeys _f = _m_a. The
only exceptions are wall bounces and wall stickiness.
Page 5 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
Another unphysical aspect is found in some of the
special forces (the second and third ones). If a
center point exists, that mass does not receive any
force response from other masses due to the special
force. In other words, these two special forces are
not _e_q_u_a_l _a_n_d _o_p_p_o_s_i_t_e forces. They're pretty much
just unreal.
_V_i_s_c_o_s_i_t_y is a viscous drag force which applies a
resistive force on the masses proportional to their
velocity.
_S_t_i_c_k_i_n_e_s_s is not a real force. When a mass hits a
wall, it loses part of its velocity component in the
direction of the wall (in an amount proportional to the
_S_t_i_c_k_i_n_e_s_s). If it loses all of this component, it
remains stuck to the wall. It will remain stuck to the
wall until a force (which exceeds an amount
proportional to the _S_t_i_c_k_i_n_e_s_s) pulls it off the wall.
Numerics
The internals of xxxxsssspppprrrriiiinnnnggggiiiieeeessss consist of a fourth order
Runge-Kutta (RK4) differental equation solver. Consult
a Numerical Methods text for more information. The
_T_i_m_e _S_t_e_p that is used by this solver (the ddddtttt) can be
set using the slider.
The solver can be selectively made into an adaptive
RK4 solver using the _A_d_a_p_t_i_v_e _T_i_m_e _S_t_e_p checkbox. An
adaptive solver chooses the best time step value
according to an error calculation. The error is not
allowed to exceed the _P_r_e_c_i_s_i_o_n value. Lower precision
values result in smaller time steps. While this is
more accurate, the simulation runs slower.
You will notice that some objects will tend to "blow
up" easily. This is because the objects are unstable,
or are sensitive to small numerical errors. An object
will tend to "blow up" less with smaller time steps.
By using an adaptive solver, the simulation can be made
more accurate only when necessary. This results in a
more stable system which runs at a reasonable speed.
Walls
There are four walls. In case you haven't guessed by
now, they are the _t_o_p, _l_e_f_t, _r_i_g_h_t and _b_o_t_t_o_m walls.
They are located at the window boundaries; they move
with window resizes. Individual walls can be enabled
and disabled by checking the corresponding checkboxes.
Walls are only one-way. An object moving from the
screen toward a wall will bounce off the wall. But an
object moving from off screen toward the screen will
Page 6 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
pass through the walls.
Saving and Restoring State
The state of the world (at least for xxxxsssspppprrrriiiinnnnggggiiiieeeessss)
includes all of the masses and springs, as well as the
system parameters. By pushing the _S_a_v_e _S_t_a_t_e button,
the current system state is saved. By pushing the
_R_e_s_t_o_r_e _S_t_a_t_e _b_u_t_t_o_n the previously saved system state
is restored (if no previous save was made, the initial
state is used).
This is useful for temporarily saving a system
configuration that you do not feel like setting up
again (or saving to a file), that you might disturb
with experimentation. If you break it, you can _R_e_s_t_o_r_e
_S_t_a_t_e any number of times you like.
The _R_e_s_e_t button resets xxxxsssspppprrrriiiinnnnggggiiiieeeessss to its initial
configuration. All the masses and springs are removed,
and the default system parameters are used.
Saving and Loading Files
The system state can be saved to and loaded from
files. By pushing the _L_o_a_d _F_i_l_e button, a previously
saved file can be loaded. This will load up all the
masses and springs that were saved, as well as the
system parameters. Any previous state before the load
is cleared. Pushing the _S_a_v_e _F_i_l_e button saves this
information in the designated file. The _I_n_s_e_r_t _F_i_l_e
button is much like the _L_o_a_d _F_i_l_e button, except that
the current state is not cleared. Instead, only the
masses and springs are loaded (the system paramaters
are not changed), and are added to the current
collection. If no objects are selected when the
_I_n_s_e_r_t _F_i_l_e button is pressed, then all the objects in
the file are selected after they are loaded.
The filenames are entered in the text window, which
is located at the bottom right of the window. For
consistency, the filenames should terminate with
"....xxxxsssspppp". When a file is loaded or saved, this extension
is automatically added if not added by the user.
Standard emacs-like editing features are present. The
following key controls can be used:
ccccoooonnnnttttrrrroooollll----BBBB move cursor backward
ccccoooonnnnttttrrrroooollll----FFFF move cursor forward
ccccoooonnnnttttrrrroooollll----AAAA goto beginning of line
ccccoooonnnnttttrrrroooollll----EEEE goto end of line
ccccoooonnnnttttrrrroooollll----KKKK kill to end of line
ccccoooonnnnttttrrrroooollll----YYYY yank from kill buffer
ccccoooonnnnttttrrrroooollll----DDDD delete character under cursor
Page 7 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
ccccoooonnnnttttrrrroooollll----UUUU erase all input
ccccoooonnnnttttrrrroooollll----TTTT transpose character under cursor with
previous character
EEEEssssccccaaaappppeeee exit from filename edit mode
By default, the directory which contains the
xxxxsssspppprrrriiiinnnnggggiiiieeeessss files is present automatically. If the
environment variable SSSSPPPPRRRRIIIINNNNGGGGDDDDIIIIRRRR is set, then the default
directory is changed to reflect it.
If a file error occurs (for example, the file does
not exist), a beep is emitted.
Other stuff
The _G_O! button simply turns on and off the animation.
With _G_O! turned off, xxxxsssspppprrrriiiinnnnggggiiiieeeessss uses up little CPU
time.
The _S_h_o_w _S_p_r_i_n_g_s checkbox controls whether or not the
springs are drawn. If there are a lot of springs,
animation may go faster with this option on. Sometimes
an object will even look better with only the masses.
When placing masses or springs, objects can be placed
in a gridlike fashion if the _G_r_i_d _S_n_a_p checkbox is
enabled. Masses will be separated (vertically and
horizontally) by the amount specified by the _G_r_i_d _S_n_a_p
slider.
When the _D_u_p_l_i_c_a_t_e button is pushed, all selected
masses and springs are duplicated. The copy is left in
the same place, unselected.
By pushing the _S_e_l_e_c_t _A_l_l button, all masses and
springs are selected.
By pushing the _D_e_l_e_t_e button, or pressing the _D_e_l_e_t_e
key, all selected objects are deleted. Note that if a
mass is deleted, all attached springs are also deleted
(even if they were not selected).
The _Q_u_i_t button quits the program. This same effect
is found by pressing the _Q key.
FFFFIIIILLLLEEEE FFFFOOOORRRRMMMMAAAATTTT
The xxxxsssspppprrrriiiinnnnggggiiiieeeessss file format is human readable. Each line
consists of a four letter command string, followed by the
parameters for that command. The file must start with the
command "####1111....0000". (This 1.0 refers to file format version
1.0, and not the version of xspringies being run) Each of
the commands below is on a line by itself. There are no
Page 8 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
blank lines allowed. The file must end in a newline.
The file consists of the following commands:
ccccmmmmaaaassss <current _M_a_s_s value>
eeeellllaaaassss <current _E_l_a_s_t_i_c_i_t_y value>
kkkksssspppprrrr <current _K_s_p_r_i_n_g value>
kkkkddddmmmmpppp <current _K_d_a_m_p value>
ffffiiiixxxxmmmm <boolean value for _F_i_x_e_d _M_a_s_s>
sssshhhhwwwwssss <boolean value for _S_h_o_w _S_p_r_i_n_g_s>
cccceeeennnntttt <mass id number of center mass>
If there is no center mass (i.e. - center of screen
is to be used), then the value of -_1 is used.
ffffrrrrcccceeee <force id number> <boolean active>
<parameter #1 value> <parameter #2 value>
The <force id number> sequence is as follows:
0000 - Gravity
1111 - Center of mass attraction force
2222 - Center attraction force
3333 - Wall repulsion force
vvvviiiisssscccc <current _V_i_s_c_o_s_i_t_y value>
ssssttttcccckkkk <current _S_t_i_c_k_i_n_e_s_s value>
sssstttteeeepppp <current _T_i_m_e _S_t_e_p value>
pppprrrreeeecccc <current _P_r_e_c_i_s_i_o_n value>
aaaaddddpppptttt <boolean value for _A_d_a_p_t_i_v_e _T_i_m_e _S_t_e_p>
ggggssssnnnnpppp <current _G_r_i_d _S_n_a_p value> <boolean enable>
wwwwaaaallllllll <boolean top> <boolean left> <boolean right>
<boolean bottom>
mmmmaaaassssssss <mass id number> <x position value>
<y position value> <x velocity value>
<y velocity value> <mass value> <elasticity value>
For each mass, the <mass id number> must be unique.
They do not need to be in any order. If a mass is
fixed, then the <mass value> field is negated.
ssssppppnnnngggg <spring id number> <mass #1 id number>
<mass #2 id number> <Kspring value> <Kdamp value>
<rest length value>
For each spring, the <spring id number> must be
unique. They do not need to be in any order. The
order of the <mass id number>'s is not important.
All _v_a_l_u_e_s are floating point numbers. All _i_d _n_u_m_b_e_r_s are
positive integers, and all _b_o_o_l_e_a_n values are non-zero/zero
for True/False. It is possible to feed xxxxsssspppprrrriiiinnnnggggiiiieeeessss bogus
values. It may produce interesting or amusing side effects,
but will most likely cause an object to explode or
xxxxsssspppprrrriiiinnnnggggiiiieeeessss to crash.
AAAAUUUUTTTTHHHHOOOORRRR
Douglas DeCarlo (dmd@gradient.cis.upenn.edu)
Please send demo files, comments, suggestions, bug reports,
bug fixes and enhancements.
Page 9 (printed 7/7/95)
XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((SSSSeeeepppptttteeeemmmmbbbbeeeerrrr 1111,,,, 1111999999992222)))) XXXXSSSSPPPPRRRRIIIINNNNGGGGIIIIEEEESSSS((((1111))))
With thanks to:
Elliott Evans
Bitmap slave.
Nathan Loofbourrow
I bothered him a whole lot about the user
interface.
Drew Olbrich
The blame for "stickiness" falls on him, as well as
a few other things.
Andy Witkin
For teaching a really great physically based
modeling course at CMU. Many ideas (both methods
and interface) came from that class.
And thanks to the many other people who helped in
testing xxxxsssspppprrrriiiinnnnggggiiiieeeessss and make some of the neat demo
files, including James Helfrich, Brian Kelley, Patrick
Lopez, Chris Newman and Jef Poskanzer.
RRRREEEESSSSTTTTRRRRIIIICCCCTTTTIIIIOOOONNNNSSSS
xxxxsssspppprrrriiiinnnnggggiiiieeeessss runs faster on a monochrome display than on a
color display (usually).
You probably don't want to run xxxxsssspppprrrriiiinnnnggggiiiieeeessss on a slow machine
or a machine which does slow bit-blitting operations. Well,
I guess you could... But you would be sorry for even trying.
Here is a good rule: If xxxxsssspppprrrriiiinnnnggggiiiieeeessss isn't fun to use, then
your machine is either too slow, or it is overloaded. Or
maybe you just aren't a fun person. :-)
Page 10 (printed 7/7/95)